﻿using System;
using System.Collections.Generic;
using System.Text;
using Business.Entities;
using System.Data;
using System.Data.SqlClient;

namespace Data.Database
{
    public class EspecialidadAdapter:Adapter
    {
        private static List<Especialidad> _ListaEspecialidades;

        public static List<Especialidad> ListaEspecialidades
        {
            get 
            {
                if (_ListaEspecialidades == null)
                {
                    _ListaEspecialidades = new List<Especialidad>();
                }
                return _ListaEspecialidades;
            }
        }

        public List<Especialidad> GetAll() //correcto
        {
            try
            {
                List<Especialidad> LEspecialidades = new List<Especialidad>();
                this.OpenConnection();
                SqlCommand cmdGet = new SqlCommand("select * from especialidades", sqlConn);
                SqlDataReader reader = cmdGet.ExecuteReader();
                while (reader.Read())
                {
                    Especialidad EspAct = new Especialidad();
                    EspAct.ID = (int)reader["id_especialidad"];
                    EspAct.Descripcion = (string)reader["desc_especialidad"];
                    LEspecialidades.Add(EspAct);
                }
                reader.Close();
                return LEspecialidades;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                this.CloseConnection();
            }
        }

        public Especialidad GetOne(int ID) //correcto
        {
            try
            {
                this.OpenConnection();
                Especialidad EspAct = new Especialidad();
                SqlCommand cmdGetOne = new SqlCommand("select * from especialidades where id_especialidad=@id", sqlConn);
                cmdGetOne.Parameters.Add("@id", typeof(int)).Value = ID;
                SqlDataReader reader = cmdGetOne.ExecuteReader();
                while (reader.Read())
                {
                    EspAct.ID = (int)reader["id_especialidad"];
                    EspAct.Descripcion = reader["desc_especialidad"].ToString();
                }
                reader.Close();
                return EspAct;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                this.CloseConnection();
            }
        }

        public void Delete(Especialidad esp) //correcto
        {
            try
            {
                this.OpenConnection();
                SqlCommand cmdDelete = new SqlCommand("delete from especialidades where id_especialidad=@id", sqlConn);
                cmdDelete.Parameters.Add("@id", typeof(int)).Value = esp.ID;
                cmdDelete.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                this.CloseConnection();
            }
        }

        public void Save(Especialidad esp) //correcto
        {
            try
            {
                this.OpenConnection();
                if (esp.State == BusinessEntity.States.New)
                {
                    SqlCommand cmdNew = new SqlCommand("insert into especialidades(desc_especialidad) values (@descrip)", sqlConn);
                    cmdNew.Parameters.Add("@descrip", typeof(string)).Value = esp.Descripcion;
                    cmdNew.ExecuteNonQuery();
                }
                else if (esp.State == BusinessEntity.States.Modified)
                {
                    SqlCommand cmdModif = new SqlCommand("update especialidades set desc_especialidad=@descrip where id_especialidad=@id", sqlConn);
                    cmdModif.Parameters.Add("@id", typeof(int)).Value = esp.ID;
                    cmdModif.Parameters.Add("@descrip", typeof(int)).Value = esp.Descripcion;
                    cmdModif.ExecuteNonQuery();
                }
                else if (esp.State == BusinessEntity.States.Unmodified)
                {

                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                this.CloseConnection();
            }
        }
    }
}
